.TH deductionguidesforstd::ranges::subrange 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
deductionguidesforstd::ranges::subrange \- deductionguidesforstd::ranges::subrange

.SH Synopsis
   Defined in header <ranges>
   template< std::input_or_output_iterator I, std::sentinel_for<I> S >      \fB(1)\fP (since
   subrange(I, S) -> subrange<I, S>;                                            C++20)
   template< std::input_or_output_iterator I, std::sentinel_for<I> S >
                                                                                (since
   subrange(I, S, /*make-unsigned-like-t*/<std::iter_difference_t<I>>) ->   \fB(2)\fP C++20)

       subrange<I, S, ranges::subrange_kind::sized>;
   template< ranges::borrowed_range<R> >

   subrange(R&&) ->
       subrange<ranges::iterator_t<R>, ranges::sentinel_t<R>,
                (ranges::sized_range<R> ||                                  \fB(3)\fP (since
                 std::sized_sentinel_for<ranges::sentinel_t<R>,                 C++20)
                 ranges::iterator_t<R>>) ?

                ranges::subrange_kind::sized :
   ranges::subrange_kind::unsized>;
   template< ranges::borrowed_range<R> >

   subrange(R&&, /*make-unsigned-like-t*/<ranges::range_difference_t<R>>)       (since
   ->                                                                       \fB(4)\fP C++20)
       subrange<ranges::iterator_t<R>, ranges::sentinel_t<R>,

                ranges::subrange_kind::sized>;

   These deduction guides are provided for std::ranges::subrange.

   1) Deduces the template arguments from the type of iterator and sentinel. The
   subrange is sized if std::sized_sentinel_for<S, I> is satisfied, as determined by
   the default template argument.
   2) Deduces the template arguments from the type of iterator and sentinel, while the
   size of range is specified. The subrange is always sized.
   3) Deduces the template arguments from the type of range. The subrange is sized if
   the size can be obtained from the range or its iterator and sentinel.
   4) Deduces the template arguments from the type of range, while the size of range is
   specified. The subrange is always sized.

   The exposition-only alias template make-unsigned-like-t maps each integer-like type
   to its corresponding unsigned version.

.SH Notes

   While constructing the subrange object,

     * for (1,2), the behavior is undefined if the iterator-sentinel pair does not
       denote a valid range,
     * for (2,4), the behavior is undefined if the given size is not equal to the size
       of the range.

.SH Example

    This section is incomplete
    Reason: no example

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to              Behavior as published              Correct behavior
   LWG 3404 C++20      meaningless deduction guides from pair-like     removed
                       types were provided

.SH Category:
     * Todo no example
